package ig.metrica;


import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Hashtable;

/**
 * The Data Transfer Object class.
 * Created 25/04/2007 08:59:14 PM
 * @author jsanchez
 */
public class ModelosDTO implements java.io.Serializable {
    
    private java.lang.Integer id;
    private java.lang.String nombre;
    private java.lang.String bandas1riesgo;
    private java.lang.String bandas2riesgo;
    private java.lang.String bandas1liquidez;
    private java.sql.Timestamp fechainicio;
    private java.lang.Integer numdias;
    private java.lang.Integer tipovaloracionpuntas;
    private java.lang.Integer idmatriz;
    private java.lang.Integer tipoRiesgo;
    private java.lang.Integer tipoModelo;
    
    private Hashtable relacionProductosFactores;
    private Hashtable relacionEspeciesFactores;
    private Hashtable relacionMonedasFactores;
    private Hashtable comportamientoAcciones;
    
    private boolean dirty = false; //dirty flag
    
    public ModelosDTO(){
    }
    
    public ModelosDTO(java.lang.Integer id, java.lang.String nombre, java.lang.String bandas1riesgo, java.lang.String bandas2riesgo, java.lang.String bandas1liquidez, java.sql.Timestamp fechainicio, java.lang.Integer numdias, java.lang.Integer tipovaloracionpuntas, java.lang.Integer idmatriz, java.lang.Integer tipoRiesgo,java.lang.Integer tipoModelo){
        this.id = id;
        this.nombre = nombre;
        this.bandas1riesgo = bandas1riesgo;
        this.bandas2riesgo = bandas2riesgo;
        this.bandas1liquidez = bandas1liquidez;
        this.fechainicio = fechainicio;
        this.numdias = numdias;
        this.tipovaloracionpuntas = tipovaloracionpuntas;
        this.idmatriz = idmatriz;
        this.tipoRiesgo = tipoRiesgo;
        this.tipoModelo=tipoModelo;
    }
    
    public String componerString(int[] arreglo){
        String resultado = "" + arreglo[0];
        for (int i=1; i<arreglo.length; i++)
            resultado += "," + arreglo[i];
        
        return resultado;
    }
    
    public int[] componerArreglo(String cadena){
        //System.out.println("componerArreglo");
        String[] tokens = cadena.split(",");
        int[] resultados = new int[tokens.length];
        for (int i = 0; i<tokens.length; i++){
            resultados[i] = new Integer(tokens[i].trim()).intValue();
        }
        return resultados;
    }
    
    private void setDirty(){
        dirty = true;
    }
    
    public boolean isDirty(){
        return dirty;
    }
    
    public void resetDirty(){
        dirty = false;
    }
    
    public java.lang.Integer getId(){ return id; }
    public void setId(java.lang.Integer id){
        this.id = id;
        setDirty();
    }
    
    public java.lang.String getNombre(){ return nombre; }
    public void setNombre(java.lang.String nombre){
        this.nombre = nombre;
        setDirty();
    }
    
    public java.lang.String getBandas1riesgo(){ return bandas1riesgo; }
    public void setBandas1riesgo(java.lang.String bandas1riesgo){
        this.bandas1riesgo = bandas1riesgo;
        setDirty();
    }
    
    public java.lang.String getBandas2riesgo(){ return bandas2riesgo; }
    public void setBandas2riesgo(java.lang.String bandas2riesgo){
        this.bandas2riesgo = bandas2riesgo;
        setDirty();
    }
    
    public java.lang.String getBandas1liquidez(){ return bandas1liquidez; }
    public void setBandas1liquidez(java.lang.String bandas1liquidez){
        this.bandas1liquidez = bandas1liquidez;
        setDirty();
    }
    
    public java.sql.Timestamp getFechainicio(){ return fechainicio; }
    public void setFechainicio(java.sql.Timestamp fechainicio){
        this.fechainicio = fechainicio;
        setDirty();
    }
    
    public java.lang.Integer getNumdias(){ return numdias; }
    public void setNumdias(java.lang.Integer numdias){
        this.numdias = numdias;
        setDirty();
    }
    
    public java.lang.Integer getTipovaloracionpuntas(){ return tipovaloracionpuntas; }
    public void setTipovaloracionpuntas(java.lang.Integer tipovaloracionpuntas){
        this.tipovaloracionpuntas = tipovaloracionpuntas;
        setDirty();
    }
    
    public java.lang.Integer getIdmatriz(){ return idmatriz; }
    public void setIdmatriz(java.lang.Integer idmatriz){
        this.idmatriz = idmatriz;
        setDirty();
    }
    
    public java.lang.Integer getTipoRiesgo(){ return tipoRiesgo; }
    public void setTipoRiesgo(java.lang.Integer tipoRiesgo){
        this.tipoRiesgo = tipoRiesgo;
        setDirty();
    }
    
    
    // populate DTO from Object
//    public void populate(Object o) {
//        Method[] methods = o.getClass().getMethods();
//        for (int i = 0; i < methods.length; i++) {
//            try{
//                String methodName = methods[i].getName();
//                if ((methodName.startsWith("get") ||
//                        methodName.startsWith("is"))
//                        && Modifier.isPublic(methods[i].getModifiers())
//                        && methods[i].getParameterTypes().length == 0
//                        && !methodName.equals("getClass")) {
//                    String setMethodName = methodName.replaceFirst(methodName.startsWith("get")?"get":"is","set");
//                    getClass().getMethod(setMethodName,new Class[]{methods[i].getReturnType()}).
//                            invoke(this, new Object[]{methods[i].invoke(o,null)});
//                }
//            }catch(IllegalAccessException ilE){
//                ilE.printStackTrace();
//            }catch(InvocationTargetException invE){
//                invE.printStackTrace();
//            }catch(NoSuchMethodException noE){
//                // Don't find setMethod for field
//            }
//        }
//    }
    
    
    /**
     * @see java.lang.Object#toString()
     */
    public String toString(){
        return this.nombre;
    }
    
    /**
     * @see java.lang.Object#equals(java.lang.Object)
     */
    public boolean equals(java.lang.Object otherOb) {
        
        if (this == otherOb) {
            return true;
        }
        if (!(otherOb instanceof ig.metrica.ModelosDTO)) {
            return false;
        }
        ig.metrica.ModelosDTO other = (ig.metrica.ModelosDTO) otherOb;
        return (
                
                (id==null?other.id==null:id.equals(other.id))
                &&
                (nombre==null?other.nombre==null:nombre.equals(other.nombre))
                &&
                (bandas1riesgo==null?other.bandas1riesgo==null:bandas1riesgo.equals(other.bandas1riesgo))
                &&
                (bandas2riesgo==null?other.bandas2riesgo==null:bandas2riesgo.equals(other.bandas2riesgo))
                &&
                (bandas1liquidez==null?other.bandas1liquidez==null:bandas1liquidez.equals(other.bandas1liquidez))
                &&
                (fechainicio==null?other.fechainicio==null:fechainicio.equals(other.fechainicio))
                &&
                (numdias==null?other.numdias==null:numdias.equals(other.numdias))
                &&
                (tipovaloracionpuntas==null?other.tipovaloracionpuntas==null:tipovaloracionpuntas.equals(other.tipovaloracionpuntas))
                &&
                (idmatriz==null?other.idmatriz==null:idmatriz.equals(other.idmatriz))
                &&
                (tipoRiesgo==null?other.tipoRiesgo==null:tipoRiesgo.equals(other.tipoRiesgo))
                
                );
    }
    
    /**
     * @see java.lang.Object#hashCode()
     */
    public int hashCode() {
        return (
                
                (id==null?0:id.hashCode())
                ^
                (nombre==null?0:nombre.hashCode())
                ^
                (bandas1riesgo==null?0:bandas1riesgo.hashCode())
                ^
                (bandas2riesgo==null?0:bandas2riesgo.hashCode())
                ^
                (bandas1liquidez==null?0:bandas1liquidez.hashCode())
                ^
                (fechainicio==null?0:fechainicio.hashCode())
                ^
                (numdias==null?0:numdias.hashCode())
                ^
                (tipovaloracionpuntas==null?0:tipovaloracionpuntas.hashCode())
                ^
                (idmatriz==null?0:idmatriz.hashCode())
                ^
                (tipoRiesgo==null?0:tipoRiesgo.hashCode())
                
                );
    }
    
    public Hashtable getRelacionProductosFactores() {
        return relacionProductosFactores;
    }
    
    public void setRelacionProductosFactores(Hashtable relacionProductosFactores) {
        this.relacionProductosFactores = relacionProductosFactores;
    }
    
    public Hashtable getRelacionEspeciesFactores() {
        return relacionEspeciesFactores;
    }
    
    public void setRelacionEspeciesFactores(Hashtable relacionEspeciesFactores) {
        this.relacionEspeciesFactores = relacionEspeciesFactores;
    }
    
    public Hashtable getRelacionMonedasFactores() {
        return relacionMonedasFactores;
    }
    
    public void setRelacionMonedasFactores(Hashtable relacionMonedasFactores) {
        this.relacionMonedasFactores = relacionMonedasFactores;
    }
    
    public Hashtable getComportamientoAcciones() {
        return comportamientoAcciones;
    }
    
    public void setComportamientoAcciones(Hashtable comportamientoAcciones) {
        this.comportamientoAcciones = comportamientoAcciones;
    }

    public java.lang.Integer getTipoModelo() {
        return tipoModelo;
    }

    public void setTipoModelo(java.lang.Integer tipoModelo) {
        this.tipoModelo = tipoModelo;
    }
    
}
